﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class AreasCollection : AbstractCollection
    {
        /// <summary>
        /// Список
        /// </summary>
        public List<Areas> AreasList
        {
            get { return Entities.Areas.AsNoTracking().ToList(); }
        }

        #region Implementation of IGetItem

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (Areas);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            return null;
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.Areas.Find(itemId);
        }

        #endregion

        #region Implementation of IAddDeleteUpdate

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            var newArea = (Areas) item;
            if (newArea == null)
                return false;


            var area4Update = GetItemByIdFromDatabase(newArea.IdArea) as Areas;

            if (area4Update == null)
                return true;

            if (!string.IsNullOrEmpty(newArea.NameEn))
                area4Update.NameEn = newArea.NameEn;

            if (!string.IsNullOrEmpty(newArea.NameRu))
                area4Update.NameRu = newArea.NameRu;

            area4Update.IdRegion = newArea.IdRegion;

            area4Update.IsActive = newArea.IsActive;


            return base.Update(area4Update, userLogin);
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region Implementation of IGetIdByName

        ///// <summary>
        ///// Получение идентификатора по имени
        ///// </summary>
        ///// <param name="name">Имя</param>
        ///// <returns>Идентификатор</returns>
        //public int GetIdByName(string name)
        //{
        //    Areas area = AreasList.FirstOrDefault(c => c.NameRu == name || c.NameEn == name);
        //    if (area == null)
        //    {
        //        return 0;
        //    }
        //    return area.IdArea;
        //}

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(AreasList);
        }

        #endregion
    }
}